package com.io.example.demoparent.linked;

/**
 * 定义 SingleLinkedList 管理链表数据
 */
public class SingleLinkedList {

    // 初始化头节点 头节点不变
    private HeroNode hand = new HeroNode(0, "", "");


    //添加节点到单向链表
    //当不考虑编号的顺序时
    //1. 找到当前链表的最后节点
    //2. 将最后这个节点的next 指向新节点
    public void addLinked(HeroNode daa) {
        // 因为hand节点不能改变，因此需要一个辅助遍历temp
        HeroNode temp = hand;
        //遍历链表，找到最后节点
        while (true) {
            //找到最后节点
            if (temp.next == null) {

                break;
            } else {
                temp = temp.next;
            }
        }
        //当退出while循环时，temp就是指向链表最后节点
        temp.next = daa;
    }

    //显示链表
    public void show() {
        if (hand.next == null) {
            System.out.println("链表为空");
            return;
        }
        HeroNode temp = hand.next;
        while (true) {
            if (temp == null) {
                break;
            } else {
                System.out.println(temp);
                //将temp 后移
                temp = temp.next;
            }

        }
    }

    /**
     * 根据序号添加
     *
     * @param data
     */
    public void adOrderlyLinked(HeroNode data) {
        boolean flag = false;
        HeroNode temp = hand;
        while (true) {
            if (temp.next == null) {
                break;
            }
            if (temp.next.no > data.no) {
                break;
            } else if (temp.next.no == data.no) {
                flag = true;
                break;
            }
            temp = temp.next;
        }
        if (flag) {
            System.out.println("编号已经存在");
        } else {
            data.next = temp.next;
            temp.next = data;
        }

    }

    /**
     * 根据编号修改
     *
     * @param heroNode
     */
    public void update(HeroNode heroNode) {
        HeroNode temp = hand;

        boolean flag = false;

        if (temp.next == null) {
            System.out.println("链表为空");
            return;
        }
        while (true) {
            if (heroNode.no == temp.no) {
                flag = true;
                break;
            }
            temp = temp.next;
        }
        if (flag) {
            temp.name = heroNode.name;
            temp.nickname = heroNode.nickname;
        } else {
            System.out.println("没有找到对应节点");
        }

    }

    /**
     * 删除节点
     *
     * @param no
     */
    public void remove(int no) {
        if (hand == null) {
            System.out.println("链表为空");
            return;
        }
        HeroNode temp = hand;
        boolean flag = false;

        while (true) {
            if (temp.next.no == no) {
                flag = true;
                break;
            }
            temp=temp.next;
        }

        if (flag) {
            temp.next=temp.next.next;
        }else {
            System.out.println("无对应编号元素");
        }


    }
}
